import os
import json
import logging
from datetime import datetime
from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import RGBColor
import glob

class SummaryAnalyzer:
    """综合分析模块，汇总多平台数据并进行深度分析"""
    
    def __init__(self, analyzer):
        """
        初始化综合分析器
        
        Args:
            analyzer: DeepSeek分析器实例
        """
        self.analyzer = analyzer
        self.reports_dir = os.getenv('STORAGE_PATH', './reports')
        self.logger = logging.getLogger('SummaryAnalyzer')
    
    def collect_platform_data(self, results):
        """
        收集各平台数据
        
        Args:
            results: 包含各平台原始数据的字典
            
        Returns:
            合并后的数据
        """
        if not results:
            self.logger.warning("没有可用的平台数据")
            return None
            
        # 合并所有平台数据
        combined_data = {
            "platforms": [],
            "data": []
        }
        
        for platform, data in results.items():
            if not data or not data.get('data'):
                continue
                
            combined_data["platforms"].append(platform)
            
            # 为每条数据添加平台标识
            for item in data.get('data', []):
                item_with_platform = item.copy()
                item_with_platform['platform'] = platform
                combined_data["data"].append(item_with_platform)
        
        # 按热度排序
        try:
            combined_data["data"].sort(key=lambda x: int(x.get('hot', '0').replace(',', '')) 
                                      if isinstance(x.get('hot', '0'), str) else int(x.get('hot', 0)), 
                                      reverse=True)
        except Exception as e:
            self.logger.error(f"排序数据时出错: {e}")
        
        return combined_data
    
    def analyze_summary(self, combined_data):
        """
        使用DeepSeek分析汇总数据，重点关注财经、社会和政策趋势
        
        Args:
            combined_data: 合并后的多平台数据
            
        Returns:
            分析结果文本
        """
        if not combined_data or not combined_data.get('data'):
            return "无法获取有效的汇总数据进行分析"
            
        # 构建更专注于特定领域的分析提示，要求输出适合Word文档的格式
        prompt = f"""
    请对以下多个社交媒体平台的热搜数据进行综合分析，输出为适合Word文档的格式：
    {json.dumps(combined_data, ensure_ascii=False)}
    
    分析要求：
    1. 重点关注财经、社会、政策相关的热点趋势，弱化文娱产业的信息
    2. 分析内容应包括：
       - 财经趋势：经济形势、市场动向、金融政策影响等
       - 社会热点：重大社会事件、民生问题、社会现象等
       - 政策解读：新政策发布、政策影响、政府动向等
    3. 对每个重要趋势进行深入分析：
       - 事件背景与发展
       - 可能的社会经济影响
       - 未来发展预测
    4. 提供对决策有参考价值的见解和建议
    
    请以客观、专业的语言进行分析，避免过多关注娱乐八卦信息。分析应当有深度，能够帮助读者增进对政策的理解和对经济形势的判断。
    
    格式要求：
    1. 不要使用Markdown格式符号（如#、*、-等）
    2. 使用清晰的标题和段落结构
    3. 重要内容可以使用"重点："开头标识
    4. 使用适合Word文档的格式，包括标题、段落和列表等
    """
        
        try:
            # 调用DeepSeek API进行分析
            response = self.analyzer.client.generate(prompt)
            
            if not response or len(response.strip()) == 0:
                return "无法获取有效的综合分析结果，请检查数据或重试。"
                
            return response
        except Exception as e:
            self.logger.error(f'综合数据分析失败: {e}')
            return f"综合分析过程中发生错误: {str(e)}"
    
    def generate_summary_report(self, analysis_text):
        """
        生成综合分析报告文件
        
        Args:
            analysis_text: 分析结果文本
            
        Returns:
            报告文件路径
        """
        doc = Document()
        
        # 添加标题
        title = doc.add_paragraph()
        title_run = title.add_run('多平台热点综合分析报告')
        title_run.font.size = Pt(18)
        title_run.bold = True
        title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
        
        # 添加生成时间
        time_para = doc.add_paragraph()
        time_run = time_para.add_run(f'生成时间: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}')
        time_run.font.size = Pt(12)
        time_para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
        
        # 添加说明
        note_para = doc.add_paragraph()
        note_run = note_para.add_run('本报告重点关注财经、社会、政策趋势，用于增进对政策的理解和对经济形势的判断')
        note_run.font.size = Pt(10)
        note_run.italic = True
        note_para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
        
        # 添加分隔线
        doc.add_paragraph("_"*50)
        
        # 处理分析文本（全面清理Markdown符号）
        clean_text = analysis_text
        # 清理各种Markdown符号
        markdown_symbols = ['#', '*', '`', '-', '>', '_', '[', ']', '(', ')', '|']
        for symbol in markdown_symbols:
            if symbol in ['(', ')', '[', ']']:  # 这些符号可能是正常文本的一部分，只有在特定模式下才替换
                continue
            clean_text = clean_text.replace(symbol, '')
        
        # 处理列表项，保留数字但去除后面的点
        import re
        clean_text = re.sub(r'(\d+)\.\s+', r'\1) ', clean_text)
        
        # 按行处理文本，保留格式
        lines = clean_text.split('\n')
        current_para = None
        
        for line in lines:
            line = line.strip()
            if not line:
                # 空行创建新段落
                current_para = None
                continue
            
            # 检测标题行（全大写、短句、以"："结尾或包含"重点："的行）
            if (line.isupper() or 
                (len(line) < 50 and not line.endswith('。')) or 
                line.endswith('：') or 
                '重点：' in line or
                re.match(r'^[一二三四五六七八九十]+、', line)):
                
                heading_para = doc.add_paragraph()
                heading_run = heading_para.add_run(line)
                heading_run.bold = True
                heading_run.font.size = Pt(14)
                
                # 如果是重点内容，添加特殊格式
                if '重点：' in line:
                    heading_run.font.color.rgb = RGBColor(192, 0, 0)  # 红色
                
                current_para = None
            else:
                # 普通文本行
                if current_para is None:
                    current_para = doc.add_paragraph()
                    current_para.add_run(line)
                else:
                    current_para.add_run('\n' + line)
        
        # 保存文件
        os.makedirs(self.reports_dir, exist_ok=True)
        filename = f"summary_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.docx"
        filepath = os.path.join(self.reports_dir, filename)
        doc.save(filepath)
        
        return filepath